package lol.clann.minecraft.springboot.api.bukkit.utils;

import lol.clann.minecraft.springboot.api.bukkit.model.bank.Bank;
import lol.clann.minecraft.springboot.api.bukkit.model.bank.BankResult;
import lol.clann.minecraft.springboot.api.bukkit.model.bank.TransformResult;

/**
 * 玩家名名字区分大小写
 *
 * @author pyz
 * @date 2019/8/18 4:11 PM
 */
public interface BankUtils {
    /**
     * 获取指定账户
     * 若不存在,会创建
     * @param playerName
     * @param onlineBankType
     * @return
     */
    Bank getBank(String playerName, String onlineBankType);

    /**
     * 获取并锁定指定账户
     * 若不存在,会创建
     * 必须在事物中执行
     * @param playerName
     * @param onlineBankType
     * @return
     */
    Bank getAndLockBank(String playerName, String onlineBankType);

    /**
     * 充值
     *
     * @param bank
     * @param mount
     * @return
     */
    BankResult pay(Bank bank, double mount);

    /**
     * 扣款
     *
     * @param bank 账户
     * @param mount
     * @return
     */
    BankResult withdraw(Bank bank, double mount);

    /**
     * 转账
     *
     * @param from 转出账户
     * @param to    转入账户
     * @param mount
     * @return
     */
    TransformResult transform(Bank from, Bank to, double mount);
}
